<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
                 type="text/css"?>

<window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
        title="XUL tree focus testing">

  <script type="application/javascript" 
          src="chrome://mochikit/content/MochiKit/packed.js" />
  <script type="application/javascript"
          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
  <script type="application/javascript"
          src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/>

  <script type="application/javascript"
          src="../treeview.js" />

  <script type="application/javascript"
          src="../common.js" />
  <script type="application/javascript"
          src="../role.js" />
  <script type="application/javascript"
          src="../states.js" />
  <script type="application/javascript"
          src="../events.js" />

  <script type="application/javascript">
  <![CDATA[

    ////////////////////////////////////////////////////////////////////////////
    // Invokers

    function focusTree(aTreeID)
    {
      var checker = new focusChecker(getFirstTreeItem, aTreeID);
      this.__proto__ = new synthFocus(aTreeID, [ checker ]);
    }

    function moveToNextItem(aTreeID)
    {
      var checker = new focusChecker(getSecondTreeItem, aTreeID);
      this.__proto__ = new synthDownKey(aTreeID, [ checker ]);
    }

    ////////////////////////////////////////////////////////////////////////////
    // Helpers

    function getTreeItemAt(aTreeID, aIdx)
      { return getAccessible(aTreeID).getChildAt(aIdx + 1); }

    function getFirstTreeItem(aTreeID)
      { return getTreeItemAt(aTreeID, 0); }

    function getSecondTreeItem(aTreeID)
      { return getTreeItemAt(aTreeID, 1); }

    ////////////////////////////////////////////////////////////////////////////
    // Test

    var gQueue = null;

    //gA11yEventDumpID = "debug"; // debugging
    //gA11yEventDumpToConsole = true; // debugging

    function doTest()
    {
      gQueue = new eventQueue();

      gQueue.push(new focusTree("tree"));
      gQueue.push(new moveToNextItem("tree"));
      gQueue.push(new synthFocus("emptytree"));

      // no focus event for changed current item for unfocused tree
      gQueue.push(new changeCurrentItem("tree", 0));

      gQueue.invoke();
    }

    SimpleTest.waitForExplicitFinish();
    addA11yXULTreeLoadEvent(doTest, "tree", new nsTableTreeView(5));
  ]]>
  </script>

  <hbox flex="1" style="overflow: auto;">
    <body xmlns="http://www.w3.org/1999/xhtml">
      <a target="_blank"
         href="https://bugzilla.mozilla.org/show_bug.cgi?id=386821"
         title="Need better solution for firing delayed event against xul tree">
        Mozilla Bug 386821
      </a>
      <a target="_blank"
         href="https://bugzilla.mozilla.org/show_bug.cgi?id=406308"
         title="Don't fire accessible focus events if widget is not actually in focus, confuses screen readers">
        Mozilla Bug 406308
      </a>
      <p id="display"></p>
      <div id="content" style="display: none">
      </div>
      <pre id="test">
      </pre>
    </body>

    <vbox id="debug"/>
    <tree id="tree" flex="1">
      <treecols>
        <treecol id="col1" flex="1" primary="true" label="column"/>
        <treecol id="col2" flex="1" label="column 2"/>
      </treecols>
      <treechildren id="treechildren"/>
    </tree>
    <tree id="emptytree" flex="1">
      <treecols>
        <treecol id="emptytree_col1" flex="1" primary="true" label="column"/>
        <treecol id="emptytree_col2" flex="1" label="column 2"/>
      </treecols>
      <treechildren id="emptytree_treechildren"/>
    </tree>
  </hbox>

</window>

